package qdrant

import (
	"fmt"
	"log"
)

// QdrantService 管理Qdrant服务的生命周期
type QdrantService struct {
	configManager *ConfigManager
	client        *VectorClient
	dataPath      string
}

// NewQdrantService 创建新的Qdrant服务实例
func NewQdrantService() *QdrantService {
	return &QdrantService{
		configManager: NewConfigManager(),
		client:        NewVectorClient(),
	}
}

// Initialize 初始化Qdrant服务
func (qs *QdrantService) Initialize(configPath string, customDataPath string, kbPath string) error {
	log.Println("开始初始化Qdrant服务...")

	// 1. 加载配置
	if err := qs.configManager.LoadConfig(configPath); err != nil {
		return fmt.Errorf("failed to load config: %w", err)
	}

	// 2. 设置数据路径
	dataPath, err := qs.configManager.GetVectorDBPath(customDataPath, kbPath)
	if err != nil {
		return fmt.Errorf("failed to determine data path: %w", err)
	}
	qs.dataPath = dataPath

	// 3. 更新配置中的数据路径
	if err := qs.configManager.SetDataPath(dataPath); err != nil {
		return fmt.Errorf("failed to set data path: %w", err)
	}

	// 4. 初始化客户端
	config := qs.configManager.GetConfig()
	if err := qs.client.Initialize(config); err != nil {
		return fmt.Errorf("failed to initialize client: %w", err)
	}

	log.Println("Qdrant服务初始化完成")
	qs.configManager.PrintConfig()

	return nil
}

// GetClient 获取Qdrant客户端
func (qs *QdrantService) GetClient() QdrantClient {
	return qs.client
}

// GetConfigManager 获取配置管理器
func (qs *QdrantService) GetConfigManager() *ConfigManager {
	return qs.configManager
}

// Close 关闭Qdrant服务
func (qs *QdrantService) Close() error {
	log.Println("正在关闭Qdrant服务...")

	// 关闭客户端连接
	if qs.client != nil {
		if err := qs.client.Close(); err != nil {
			log.Printf("关闭客户端时出错: %v", err)
		}
	}

	log.Println("Qdrant服务已关闭")
	return nil
}

// HealthCheck 执行健康检查
func (qs *QdrantService) HealthCheck() error {
	if qs.client == nil {
		return fmt.Errorf("client not initialized")
	}

	return qs.client.HealthCheck()
}

// GetServiceStatus 获取服务状态
func (qs *QdrantService) GetServiceStatus() map[string]interface{} {
	status := map[string]interface{}{
		"initialized":  qs.client != nil,
		"data_path":    qs.dataPath,
		"service_type": "SimpleQdrantClient",
	}

	// 尝试获取集合信息
	if qs.client != nil {
		config := qs.configManager.GetConfig()
		if info, err := qs.client.GetCollectionInfo(config.Collection.Name); err == nil {
			status["collection_info"] = info
		}
	}

	return status
}

// 便利函数：快速初始化
func InitializeQdrant(configPath string, customDataPath string, kbPath string) (*QdrantService, error) {
	service := NewQdrantService()
	if err := service.Initialize(configPath, customDataPath, kbPath); err != nil {
		return nil, err
	}
	return service, nil
}

// 便利函数：创建默认配置文件
func CreateDefaultConfig(configPath string) error {
	configManager := NewConfigManager()
	return configManager.SaveConfig(configPath)
}
